#########################
#### DTOs
#### Estrutura dos objectos que deve ser passada ao anotador!
#########################
#from com.xhaus.jyson import JysonCodec as json

def obj_dic(d):
   top = type('new', (object,), d)
   seqs = tuple, list, set, frozenset
   for i, j in d.items():
      if j == 'None':
         j = None
      elif i == 'equipa1' or i == 'equipa2': 
         j = dict(j)
      elif i == 'jogadores' or i == 'ocorrencias': 
         j = list(j)
         for x in range(len(j)):
            j[x] = obj_dic(j[x])
      #print '*', i, type(i), j, type(j)
      
      if isinstance(j, dict):
         setattr(top, i, obj_dic(j))
      elif isinstance(j, seqs):
         setattr(top, i, type(j)(obj_dic(sj) if isinstance(sj, dict) else sj for sj in j))
      else:
         setattr(top, i, j)
   return top



class FotoInfo:
   def __init__(self):
      self.equipa1 = None   #Equipa
      self.equipa2 = None   #Equipa
      self.bolaEsta = None  #Enum{ ZonaDoCampo, Baliza, Defesa, MeioCampo, Ataque }
      self.foto = None      #string
      self.nomeJogo = None  #string
   
   def __json__(self):
      e1 = self.equipa1.__json__() if self.equipa1 else 'None'
      e2 = self.equipa2.__json__() if self.equipa2 else 'None'
      b = 'None' if self.bolaEsta == '' else self.bolaEsta
      f = 'None' if self.foto == '' else self.foto
      n = 'None' if self.nomeJogo == '' else self.nomeJogo
      
      return u'{"equipa1":%s, "equipa2":%s, "bolaEsta":"%s", "foto":"%s", "nomeJogo":"%s"}' % (e1, e2, b, f, n)
   
class Equipa:
   def __init__(self):
      self.nome = None #string
      self.tipo = None #Enum { Equipa, EquipaAtacante, EquipaDefensora }
      self.jogadores = [] #Array de Jogador
   
   def __json__(self):
      nome = 'None' if self.nome == '' else self.nome
      tipo = self.tipo#'None' if self.tipo == '' else self.tipo
      
      js = ''
      for j in self.jogadores:
         js += j.__json__() + ','
      js = js[:len(js) - 1]
      jogadores = u'[%s]' % js
      
      return '{"nome":"%s", "tipo":"%s", "jogadores":%s}' % (nome, tipo, jogadores)
   
class Jogador:
   def __init__(self):
      self.nome = None #string
      self.equipa = None #Enum { Equipa, EquipaAtacante, EquipaDefensora }
      self.ocorrencias = [] #Array de Ocorrencia
      self.eCanhoto = False
   
   def __json__(self):
      n = 'None' if self.nome == '' else self.nome
      e = 'None' if self.equipa == '' else self.equipa
      
      occs = ""
      for o in self.ocorrencias:
         occs += o.__json__() + ','
      occs = occs[:len(occs) -1]
      ocorrencias = "[%s]" % occs

      return '{"nome":"%s", "equipa":"%s", "ocorrencias":%s, "eCanhoto":"%r"}' % (n, e, ocorrencias, self.eCanhoto)
   
class Ocorrencia:
   def __init__(self):
      self.fazCorte = None #Enum{ Corte, Carrinho, CorteCabeca, Defesa, Desarme, Interseccao }
      self.fazFalta = None #Enum{ Falta, Agressao, Mao, Puxao, Toque }
      self.bolaParada = None #Enum{ BolaParada, Canto, Livre, Penalti }
      self.remate = None #Enum{ Atacante, Remate, RemateCabeca }
      self.golo = False
      self.local = None #Enum{ ZonaDoCampo, Baliza, Defesa, MeioCampo, Ataque }
      self.festeja = False
   
   def __json__(self):
      return '{"fazCorte":"%s", "fazFalta":"%s", "bolaParada":"%s", "remate":"%s", "golo":"%r", "local":"%s", "festeja":"%r"}' % (self.fazCorte, self.fazFalta, self.bolaParada, self.remate, self.golo, self.local, self.festeja)


if __name__ == "__main__":
   def criar_dto_1():
      jogo = FotoInfo()
      jogo.equipa1 = Equipa()
      jogo.equipa2 = None
      jogo.equipa1.jogadores = [Jogador()]
      jogo.equipa1.jogadores[0].nome = 'Juan'
      return jogo

   def criar_dto_2():
      jogo = FotoInfo()
      jogo.equipa1 = Equipa()
      jogo.equipa2 = None
      jogo.equipa1.jogadores = [Jogador()]
      jogo.equipa1.jogadores[0].nome = 'Cristiano Ronaldo'
      return jogo
      
   def criar_dto_3():
      jogo = FotoInfo()
      jogo.equipa1 = Equipa()
      jogo.equipa1.nome = "Brasil"
      jogo.equipa2 = None
      return jogo

   def criar_dto_4():
      jogo = FotoInfo()
      jogo.equipa1 = Equipa()
      jogo.equipa1.nome = "Real Madrid"
      o = Ocorrencia()
      o.golo = True
      j = Jogador()
      j.nome = 'Cristiano Ronaldo'
      j.ocorrencias.append(o)
      jogo.equipa1.jogadores.append(j)
      jogo.equipa2 = None
      return jogo

   def criar_dto_5():
      jogo = FotoInfo()
      jogo.equipa1 = Equipa()
      j = Jogador()
      j.nome = 'Juan'
      o = Ocorrencia()
      o.fazCorte = 'Carrinho'
      j.ocorrencias.append(o)
      jogo.equipa1.nome = "Brasil"
      jogo.equipa1.jogadores.append(j)
      jogo.equipa2 = None
      return jogo

   def criar_dto_6():
      jogo = FotoInfo()
      jogo.equipa1 = Equipa()
      j = Jogador()
      o = Ocorrencia()
      o.fazCorte = 'Corte'
      j.ocorrencias.append(o)
      jogo.equipa1.nome = "Brasil"
      jogo.equipa1.jogadores.append(j)
      jogo.equipa2 = None
      return jogo
   
   # ----------------------------------------------------------------------------------------------
   '''from com.xhaus.jyson import JysonCodec as json
   print json.dumps(criar_dto_1())
   print json.dumps(criar_dto_2())
   print json.dumps(criar_dto_3())
   print json.dumps(criar_dto_4())
   print json.dumps(criar_dto_5())
   print json.dumps(criar_dto_6())
   print '-'*80
   
   dto_json_str = json.dumps(criar_dto_1())
   dto_dict = json.loads(dto_json_str)
   dto =  obj_dic(dto_dict)

   print dto_json_str
   print '-'*25

   print dto.equipa1
   print dto.equipa1.jogadores
   print dto.equipa1.jogadores[0].nome
   
   import interrogador
   i = interrogador.Interrogador()
   es = i.pesquisar(dto)
   for e in es:
      print e.toString()'''

